package com.tangsm.spring.boot.strategy.message.domain;

import com.sun.istack.internal.NotNull;
import com.tangsm.spring.boot.strategy.message.enums.MessageEnum;

import java.util.HashMap;
import java.util.Map;

/**
 * 消息实体
 *
 * @author tangsm
 */
public class Message {
    /**
     * 无参构造
     */
    public Message() {
    }

    /**
     * 验证消息验证码构造方法
     *
     * @param target  电话号码或邮箱号码
     * @param groupNo 消息平台模板组号
     * @param type    消息类型
     * @param code    消息验证码
     */
    public Message(String target, String groupNo, String type, String code) {
        this.target = target;
        this.groupNo = groupNo;
        this.type = type;
        this.code = code;
    }

    /**
     * 发送消息验证码构造方法
     *
     * @param target      电话号码或邮箱号码
     * @param groupNo     消息平台模板组号
     * @param type        消息类型
     * @param isValidCode 是否生成验证码（1-是，0否）
     * @param validTime   验证码有效时间
     * @param paramMap    模板参数
     */
    public Message(String target, String groupNo, String type, boolean isValidCode, long validTime, Map<String, String> paramMap) {
        this.target = target;
        this.groupNo = groupNo;
        this.type = type;
        this.isValidCode = isValidCode;
        this.validTime = validTime;
        this.paramMap = paramMap;
    }

    /**
     * 发送目标，手机号码或邮箱
     */
    @NotNull
    private String target;

    /**
     * 消息平台模板组号
     */
    @NotNull
    private String groupNo;

    /**
     * 消息类型
     *
     * @see MessageEnum
     */
    @NotNull
    private String type;

    /**
     * 是否生成验证码（true-是，false-否，默认：false）
     */
    @NotNull
    private boolean isValidCode = false;

    /**
     * 验证码有效时间（分钟，默认1分钟，不生成验证码此参数无效）
     */
    private long validTime = 1L;

    /**
     * 模板参数
     */
    private Map<String, String> paramMap = new HashMap<>();

    /**
     * 消息验证码（验证消息验证码的时候必须输入）
     */
    private String code;

    public String getTarget() {
        return target;
    }

    public void setTarget(String target) {
        this.target = target;
    }

    public String getGroupNo() {
        return groupNo;
    }

    public void setGroupNo(String groupNo) {
        this.groupNo = groupNo;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public boolean getIsValidCode() {
        return isValidCode;
    }

    public void setIsValidCode(boolean isValidCode) {
        this.isValidCode = isValidCode;
    }

    public long getValidTime() {
        return validTime;
    }

    public void setValidTime(long validTime) {
        this.validTime = validTime;
    }

    public Map<String, String> getParamMap() {
        return paramMap;
    }

    public void setParamMap(Map<String, String> paramMap) {
        this.paramMap = paramMap;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
}
